Вы можете рассмотреть grep
, как в ответе на Использование regexp для выбора строк в R dataframe . Адаптировано к вашим данным:
df <- read.table(text=" Allele1 Allele2 SNP_name gs_entry pedigree_dhl
1 T T ZM011407_0151 656 CCB133$*1
2 T T ZM009374_0354 656 CCB133$*1
3 C C ZM003499_0591 656 CCB133$*1
4 A A ZM003898_0594 656 CCB133$*1
5 C C ZM004887_0313 656 CCB133$*1
6 G G ZM000583_1096 656 CCB133$*1", header=T)
# put into df1 all rows where pedigree_dhl starts with CCB133$
p1 <- 'CCB133$'
df1 <- subset(df, grepl(p1, pedigree_dhl) )
Но ваш вопрос подразумевает, что вы можете выбрать семизначное имя или просто отсортировать строки по имени родословной, и может быть проще сохранить все строки вместе в отсортированном кадре данных. Все эти три операции: подстановка, извлечение нового столбца или сортировка могут выполняться независимо.
# If you want to create a new column based
# on the first seven letter of SNP_name (or any other variable)
df$SNP_7 <- substr(df$SNP_name, start=1, stop=7)
# If you want to order by pedigree_dhl
# then you don't need to select out the rows into a new dataframe
df <- df[ with(df, order(df$pedigree_dhl)), ]
Все это может быть очевидным - я добавляю их просто для полноты.
Этот код TypeScript
class A {
private a1;
public a2;
}
компилируется в этот код JavaScript
class A {
}
Это связано с тем, что свойства в JavaScript начинаются только после того, как они имеют некоторое значение. Вы должны назначить свойства некоторым значениям.
class A {
private a1 = "";
public a2 = "";
}
он компилируется в
class A {
constructor() {
this.a1 = "";
this.a2 = "";
}
}
Тем не менее вы не можете получить свойства из простого класса (вы можете получить только методы из прототипа ). Вы должны создать экземпляр. Затем вы получите свойства, вызвав Object.getOwnPropertyNames()
.
let a = new A();
let array = return Object.getOwnPropertyNames(a);
array[0] === "a1";
array[1] === "a2";
class Describer {
static describe(instance): Array<string> {
return Object.getOwnPropertyNames(instance);
}
}
let a = new A();
let x = Describer.describe(a);
Другое решение. Вы можете просто перебирать объектные ключи так, вы должны сначала создать экземпляр объекта:
printTypeNames<T>(obj: T) {
const objectKeys = Object.keys(obj) as Array<keyof T>;
for (let key of objectKeys)
{
console.Log('key:' + key);
}
}
Только для fun
class A {
private a1 = void 0;
private a2 = void 0;
}
class B extends A {
private a3 = void 0;
private a4 = void 0;
}
class C extends B {
private a5 = void 0;
private a6 = void 0;
}
class Describer {
private static FRegEx = new RegExp(/(?:this\.)(.+?(?= ))/g);
static describe(val: Function, parent = false): string[] {
var result = [];
if (parent) {
var proto = Object.getPrototypeOf(val.prototype);
if (proto) {
result = result.concat(this.describe(proto.constructor, parent));
}
}
result = result.concat(val.toString().match(this.FRegEx) || []);
return result;
}
}
console.log(Describer.describe(A)); // ["this.a1", "this.a2"]
console.log(Describer.describe(B)); // ["this.a3", "this.a4"]
console.log(Describer.describe(C, true)); // ["this.a1", ..., "this.a6"]
Обновление: если вы используете пользовательские конструкторы, эта функция будет ломаться.
Некоторые ответы частично ошибочны, и некоторые факты в них также частично ошибочны.
Ответьте на свой вопрос: Да! Вы можете.
В Typcript
class A {
private a1;
private a2;
}
Создает следующий код в Javascript:
var A = /** @class */ (function () {
function A() {
}
return A;
}());
как @Erik_Cupal , вы можете просто сделать:
let a = new A();
let array = return Object.getOwnPropertyNames(a);
Но это неполное. Что произойдет, если ваш класс имеет собственный конструктор? Вам нужно сделать трюк с Typcript, потому что он не будет компилироваться. Вам нужно назначить любое:
let className:any = A;
let a = new className();// the members will have value undefined
Общее решение будет:
class A {
private a1;
private a2;
constructor(a1:number, a2:string){
this.a1 = a1;
this.a2 = a2;
}
}
class Describer{
describeClass( typeOfClass:any){
let a = new typeOfClass();
let array = Object.getOwnPropertyNames(a);
return array;//you can apply any filter here
}
}
Для лучшего понимания это будет ссылаться в зависимости от контекста.
constructor(callback: {getValue: () => number}) { this.numberValue = callback.getValue(); }
– Markus Ende
30 September 2017 в 18:14